/**
 * 支付工具函数
 * 提供统一的支付相关功能
 */

/**
 * 打开支付弹窗
 * @param {Object} appInstance - Vue应用实例
 * @param {Object} product - 产品信息
 * @param {string} product.id - 产品ID
 * @param {string} product.name - 产品名称
 * @param {number} product.price - 产品价格
 * @param {string} product.type - 产品类型 (membership, single_play, ticket, package)
 * @param {string} [product.details] - 产品详情
 */
export const openPaymentModal = (appInstance, product) => {
  if (appInstance && appInstance.showPaymentModal !== undefined) {
    appInstance.selectedProduct = {
      id: product.id || `PROD${Date.now()}`,
      name: product.name,
      price: product.price,
      type: product.type || 'membership',
      details: product.details || ''
    }
    appInstance.showPaymentModal = true
    return true
  }
  return false
}

/**
 * 验证用户登录状态
 * @returns {boolean} 是否已登录
 */
export const checkUserLogin = () => {
  return localStorage.getItem('isLoggedIn') === 'true' || 
         sessionStorage.getItem('isLoggedIn') === 'true'
}

/**
 * 获取用户信息
 * @returns {Object|null} 用户信息对象或null
 */
export const getUserInfo = () => {
  const storedUserInfo = localStorage.getItem('userInfo')
  if (storedUserInfo) {
    try {
      return JSON.parse(storedUserInfo)
    } catch (e) {
      console.error('解析用户信息失败:', e)
    }
  }
  return null
}

/**
 * 获取用户会员等级
 * @returns {string} 会员等级（游客、学子会员、传人会员、大师会员）
 */
export const getUserLevel = () => {
  const userInfo = getUserInfo()
  return userInfo?.level || '游客'
}

/**
 * 检查用户是否有权限访问内容
 * @param {string} requiredLevel - 所需的会员等级
 * @returns {boolean} 是否有权限
 */
export const checkAccessPermission = (requiredLevel) => {
  const userLevel = getUserLevel()
  
  // 定义会员等级权限顺序
  const levelHierarchy = {
    '游客': 0,
    '学子会员': 1,
    '传人会员': 2,
    '大师会员': 3
  }
  
  // 确保requiredLevel是有效的键
  if (!Object.prototype.hasOwnProperty.call(levelHierarchy, requiredLevel)) {
    return false
  }
  
  // 比较用户等级和所需等级
  return levelHierarchy[userLevel] >= levelHierarchy[requiredLevel]
}

/**
 * 计算会员折扣
 * @param {number} originalPrice - 原价
 * @param {string} userLevel - 用户会员等级
 * @returns {number} 折扣后的价格
 */
export const calculateDiscountedPrice = (originalPrice, userLevel = null) => {
  if (!userLevel) {
    userLevel = getUserLevel()
  }
  
  // 定义各等级折扣
  const discountRates = {
    '游客': 1,
    '学子会员': 0.95,
    '传人会员': 0.9,
    '大师会员': 0.85
  }
  
  const discount = discountRates[userLevel] || 1
  return Math.round(originalPrice * discount * 100) / 100
}

/**
 * 模拟支付处理
 * @param {Object} paymentData - 支付数据
 * @returns {Promise<Object>} 支付结果
 */
export const processPayment = (paymentData) => {
  return new Promise((resolve) => {
    // 模拟支付延迟
    setTimeout(() => {
      resolve({
        success: true,
        orderId: 'ORDER' + Date.now(),
        timestamp: new Date().toISOString(),
        amount: paymentData.amount,
        paymentMethod: paymentData.method
      })
    }, 2000)
  })
}

/**
 * 格式化价格显示
 * @param {number} price - 价格
 * @returns {string} 格式化后的价格字符串
 */
export const formatPrice = (price) => {
  return `¥${price.toFixed(2)}`
}

/**
 * 获取推荐的会员套餐
 * @returns {Object} 推荐套餐信息
 */
export const getRecommendedPlan = () => {
  return {
    id: 2,
    name: '传人会员',
    price: 69,
    period: '月',
    originalPrice: 129,
    description: '性价比最高的选择，完整体验皮影艺术',
    badge: '热门',
    features: ['1080P高清', '无限点播', '独家幕后花絮', '演出票9折优惠']
  }
}

/**
 * 检查会员是否即将到期
 * @param {number} daysThreshold - 到期天数阈值
 * @returns {boolean} 是否即将到期
 */
export const isMembershipExpiringSoon = (daysThreshold = 7) => {
  const userInfo = getUserInfo()
  if (!userInfo || !userInfo.expiresDate || userInfo.level === '游客') {
    return false
  }
  
  const now = new Date()
  const expires = new Date(userInfo.expiresDate)
  const diffTime = expires - now
  const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24))
  
  return diffDays > 0 && diffDays <= daysThreshold
}